流计算Storm的安装与测试

本教程的具体运行环境如下:

Deepin 15.1 (Ubuntu)

Storm 0.9.6

Java JDK 1.7 (jdk大家都安装了)

ZooKeeper 3.4.10

Python 2.7 (Linux自带python)

因为jdk和python都有了,所以主要介绍ZooKeeper和Storm安装

一、安装Storm

安装 Zookeeper

本教程选择安装 zookeeper 最新稳定版(3.4.10),下载地址:http://mirrors.cnnic.cn/apache/zookeeper/stable/http://mirror.bit.edu.cn/apache/zookeeper/stable/

下载后执行如下命令进行安装 zookeeper(将命令中 3.4.10 改为你下载的版本):

1
2
3
4
$sudo tar -zxf ~/下载/zookeeper-3.4.10.tar.gz -C /usr/local
$cd /usr/local
$sudo mv zookeeper-* zookeeper #改文件夹名
$sudo chown -R hadoop ./zookeeper #此处的hadoop为你的用户名

接着执行如下命令进行zookeeper配置:

1
2
3
4
$cd /usr/local/zookeeper
$mkdir tmp
$cp ./conf/zoo_sample.cfg ./conf/zoo.cfg
$vim ./conf/zoo.cfg

将当中的 dataDir=/tmp/zookeeper 更改为 dataDir=/usr/local/zookeeper/tmp

接着执行:

1
$./bin/zkServer.sh start

若显示如下图则表示启动成功:

安装Storm(单机)

本教程所使用的版本为 Storm 0.9.6 ,下载地址
http://www.apache.org/dyn/closer.lua/storm/apache-storm-0.9.6/apache-storm-0.9.6.tar.gz

下载后执行如下命令进行安装Storm:

1
2
3
4
$sudo tar -zxf ~/下载/apache-storm-0.9.6.tar.gz -C /usr/local
$cd /usr/local
$sudo mv apache-storm-0.9.6 storm
$sudo chown -R hadoop ./storm # 此处的hadoop为你的用户名

接着执行如下命令进行Storm配置:

1
2
$cd /usr/local/storm
$vim ./conf/storm.yaml

修改其中的 storm.zookeeper.servers 和 nimbus.host 两个配置项,即取消掉注释且都修改值为 127.0.0.1(我们只需要在单机上运行),如下图所示。

简单配置后就可以启动 Storm 了。执行如下命令启动 nimbus 后台进程:

1
./bin/storm nimbus

若启动成功则显示如下图内容:

启动 nimbus 后,终端被该进程占用了,不能再继续执行其他命令了。因此我们需要另外开启一个终端,然后执行如下命令启动 supervisor 后台进程:

1
2
# 需要另外开启一个终端
/usr/local/storm/bin/storm supervisor

同样的,启动 supervisor 后,我们还需要开启另外的终端才能执行其他命令。另外,我们可以使用 jps 命令 检查是否成功启动,若成功启动会显示 nimbus、supervisor、QuorumPeeMain (QuorumPeeMain 是 zookeeper 的后台进程,若显示 config_value 表明 nimbus 或 supervisor 还在启动中),如下图所示。

关闭Storm

之前启动的 nimbus 和 supervisor 占用了两个终端窗口,切换到这两个终端窗口,按键盘的 Ctrl+C 可以终止进程,终止后,也就相当于关闭了 Storm。

运行Storm实例-WordCount

Storm中自带了一些例子,我们可以执行一下 WordCount 例子来感受一下 Storm 的执行流程。执行如下命令:

1
/usr/local/storm/bin/storm jar /usr/local/storm/examples/storm-starter/storm-starter-topologies-0.9.6.jar storm.starter.WordCountTopology

该程序是不断地取如下四句英文句子中的一句作为数据源,然后发送给 bolt 来统计单词出现的次数。

1
2
3
4
5
6
7
{
"the cow jumped over the moon",
"an apple a day keeps the doctor away",
"four score and seven years ago",
"snow white and the seven dwarfs", "i am at two with na
ture"
}

可以看到程序执行过程中会输出非常多的信息(info 级别的日志输出,所以信息比较多),我们可以运行如下命令,使用 grep 命令对输出信息进行过滤,只输出我们所关心的内容–单词的实时统计信息(在这里我们只显示用于统计单词次数的 bolt 的输出信息)。

1
/usr/local/storm/bin/storm jar /usr/local/storm/examples/storm-starter/storm-starter-topologies-0.9.6.jar storm.starter.WordCountTopology | grep 'Thread-[0-9]*-count'

输出的结果如下图,一次处理会输出两条信息,一是显示接收到的数据(单词[“agp”]),二是输出该单词当前总的出现次数([ago, 55],表示当前”ago”已出现了55次)。

使用Maven编译运行Storm入门代码(Storm starter)

编译、运行代码

最好将 maven 命令加入 PATH 变量中。执行

1
vim ~/.bashrc

在最后面加上一行

1
export PATH=/usr/local/maven/bin:$PATH

保存文件执行 

1
source ~/.bashrc

接着执行 mvn -v 检验。


先改一下maven配置文件/usr/local/maven/conf/settinmgs.xml,
要不有些依赖可能阿里云镜像没有,会出现依赖找不到。

1
2
cd /usr/local/storm/examples/storm-starter
mvn compile exec:java -Dstorm.topology=storm.starter.WordCountTopology
1
2
3
4
5
6
7
8
9
10
11
12
<!-- 在 <mirrors> .. </mirrors> 中添加如下配置: -->
<mirror>
<id>clojars</id>
<mirrorOf>clojars</mirrorOf>
<url>http://clojars.org/repo/</url>
</mirror>
<!-- 在 <repositories> .. </repositories> 中添加如下配置: -->
<repository>
<id>clojars</id>
<url>http://clojars.org/repo/</url>
</repository>
1
2
cd /usr/local/storm/examples/storm-starter
mvn compile exec:java -Dstorm.topology=storm.starter.WordCountTopology
1
2
3
4
5
6
7
8
9
10
11
12
<!-- 在 <mirrors> .. </mirrors> 中添加如下配置: -->
<mirror>
<id>clojars</id>
<mirrorOf>clojars</mirrorOf>
<url>http://clojars.org/repo/</url>
</mirror>
<!-- 在 <repositories> .. </repositories> 中添加如下配置: -->
<repository>
<id>clojars</id>
<url>http://clojars.org/repo/</url>
</repository>

在此之前请先开启 Storm (即开启 zookeeper,nimbus 和 supervisor),并确定系统处于联网状态,因为在编译过程中需要下载不少依赖包。

接着我们开始使用 maven 编译、运行 Storm starter。我们只需要进入 storm starter 所在目录,再执行相应的 mvn 命令,并指定参数即可,以运行 Storm starter 中的 WordCount 为例(WordCount 源码位于:/usr/local/storm/examples/storm-starter 下的 src/jvm/storm/starter/WordCountTopology.java):

1
mvn compile exec:java -Dstorm.topology=storm.starter.WordCountTopology | grep 'Thread-[0-9]*-count'

可以看到输出结果与 Storm安装教程 中运行实例时是一致的,说明编译正确。


Author: 张琼

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器